package com.qianfeng.tools.multidownload;

import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.qianfeng.project.global.BaseApplication;

import android.os.AsyncTask;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * @author SAMSUNG
 * 解析配置文件信息-->xml解析
 * 
 * 处理 "我"模块   --> 个人中心 --> 更新 信息
 */
public class GetServerVersionXml extends AsyncTask<String, Void, Void >{
	private RelativeLayout relative_update;
	private ImageView can_update;
	private TextView already_new;
	
	public GetServerVersionXml(RelativeLayout relative_update,
			ImageView can_update, TextView already_new) {
		super();
		this.relative_update = relative_update;
		this.can_update = can_update;
		this.already_new = already_new;
	}
	
	//重写异步任务的3个方法
	@Override
	protected void onPreExecute() {
		// TODO Auto-generated method stub
		super.onPreExecute();
	}

	//解析 xml 文件
	/* (non-Javadoc)
	 * @see android.os.AsyncTask#doInBackground(java.lang.Object[])
	 * 
           无论是使用HttpGet，还是使用HttpPost，都必须通过如下3步来访问HTTP资源。
           1.创建HttpGet或HttpPost对象，将要请求的URL通过构造方法传入HttpGet或HttpPost对象。
           2.使用DefaultHttpClient类的execute方法发送HTTP GET或HTTP POST请求，并返回HttpResponse对象。
           3.通过HttpResponse接口的getEntity方法返回响应信息，并进行相应的处理。
           如果使用HttpPost方法提交HTTP POST请求，则需要使用HttpPost类的setEntity方法设置请求参数。
           参数则必须用NameValuePair[]数组存储。
	 */
	@Override
	protected Void doInBackground(String... params) {
		// TODO Auto-generated method stub
		try {
			String uri = params[0];
			HttpGet get = new HttpGet(uri);
			HttpClient client = new DefaultHttpClient();
			HttpResponse res = client.execute(get);
			
			if (res.getStatusLine().getStatusCode() == 200) {
				HttpEntity entity = res.getEntity();
				InputStream is = entity.getContent();
				//实例化一个文档构建器工厂
				DocumentBuilderFactory factory = DocumentBuilderFactory
						.newInstance();
				//通过文档构建器工厂获取一个文档构建器
				DocumentBuilder builder;
				builder = factory.newDocumentBuilder();
				//通过文档构建器构建一个文档实例
				Document document = builder.parse(is);
				//获取XML文件根节点
				Element root = document.getDocumentElement();
				// 获得所有子节点
				NodeList childNodes = root.getChildNodes();
				for (int j = 0; j < childNodes.getLength(); j++) {
					// 遍历子节点
					Node childNode = (Node) childNodes.item(j);
					if (childNode.getNodeType() == Node.ELEMENT_NODE) {
						Element childElement = (Element) childNode;
						// 版本号
						if ("version".equals(childElement.getNodeName())) {
							BaseApplication.serCode = Integer
									.valueOf(childElement.getFirstChild()
											.getNodeValue());
						}
						// 软件名称
						else if (("name".equals(childElement.getNodeName()))) {
							BaseApplication.serName = childElement
									.getFirstChild().getNodeValue();
						}
						// 下载地址
						else if (("url".equals(childElement.getNodeName()))) {
							BaseApplication.Url = childElement.getFirstChild()
									.getNodeValue();
						}
						// 更新日志
						else if (("updatelog"
								.equals(childElement.getNodeName()))) {
							BaseApplication.updatelog = childElement
									.getFirstChild().getNodeValue();
						}
					}
				}
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return null;
	}
	
	//更新图标的显示与隐藏
	@Override
	protected void onPostExecute(Void result) {
		// TODO Auto-generated method stub
		super.onPostExecute(result);
		if (BaseApplication.serCode > BaseApplication.locCode) {
			can_update.setVisibility(View.VISIBLE);
			already_new.setVisibility(View.GONE);
			relative_update.setClickable(true);
		} else {
			can_update.setVisibility(View.GONE);
			already_new.setVisibility(View.VISIBLE);
			relative_update.setClickable(false);
		}
	}

}
